/*******
 * @description: [正则匹配两字符串之间的值]
 * @author: 琴时
 */
let str =
  '打酱油X我们是大写埃克斯(x)到大写歪(y)之间的值Y打酱油B,匹配X到Y之间的字符串'
/* 匹配变量 */
const startStr = 'X'
const endStr = 'Y'
/* 匹配两个字符串X与Y中间的字符串包含X与Y*/
const reg = /X.*?Y/g //"."表示任意字符、"*"表示重复零次或更多次、"?"表示重复零次或一次
const pattern = new RegExp(`${startStr}.*?${endStr}`, 'g') //与reg等价
console.log('测试:', str.match(reg)) //测试: [ 'X我们是大写埃克斯(x)到大写歪(y)之间的值Y', 'X到Y' ]
console.log('测试:', str.match(pattern)) //测试: [ 'X我们是大写埃克斯(x)到大写歪(y)之间的值Y', 'X到Y' ]

/* 匹配两个字符串X与Y中间的字符串包含A但是不包含Y */
const reg1 = /X.*?(?=Y)/g //".*?"解释同上reg描述、前瞻语法:str(?=Y) 查找Y前面的str
const pattern1 = new RegExp(`${startStr}.*?(?=${endStr})`, 'g') //与reg1等价
console.log('测试:', str.match(reg1)) //测试: [ 'X我们是大写埃克斯(x)到大写歪(y)之间的值', 'X到' ]
console.log('测试:', str.match(pattern1)) //测试: [ 'X我们是大写埃克斯(x)到大写歪(y)之间的值', 'X到' ]

/* 匹配两个字符串X与Y中间的字符串且不包含X与Y */
const reg2 = /(?<=X).*?(?=Y)/g //后顾语法:(?<=X)str 查找X后面的str、".*?(?=Y)"解释同上reg1描述
const pattern2 = new RegExp(`(?<=${startStr}).*?(?=${endStr})`, 'g') //与reg2等价
console.log('测试:', str.match(reg2)) //测试: [ '我们是大写埃克斯(x)到大写歪(y)之间的值', '到' ]
console.log('测试:', str.match(pattern2)) //测试: [ '我们是大写埃克斯(x)到大写歪(y)之间的值', '到' ]

let str =
  '<p><img src="/uploads%5C84b59cb7-4680-4820-869b-a58255548b61.png" alt="001.png" width="209px" /></p>'
const pattern = new RegExp(
  `${'(<p><img src="/uploads|<p><img src="/uploads|<img src="/uploads|<img src="uploads)'}.*?${'(/></p>|/>)'}+`,
  'g'
)
console.log('测试:', str.match(pattern)) //测试: <img src="uploads%5C84b59cb7-4680-4820-869b-a58255548b61.png" alt="001.png" width="209px" />
